[レポート] Customizing models for enhanced results: Fine-tuning in Amazon Bedrock (AIM357) #AWSreInvent
こんにちは、森田です。
本記事は「AWS re:Invent 2024 - Customizing models for enhanced results: Fine-tuning in Amazon Bedrock (AIM357) 」のセッションレポートです。
概要
Unleash the power of customized AI by fine-tuning generative AI models in Amazon Bedrock to achieve higher quality results. Discover how to adapt foundation models like Meta's Llama and Anthropic's Claude models to your specific use cases and domains, boosting accuracy and efficiency. This session covers the technical process, from data preparation to model customization techniques, training strategies, deployment considerations, and post-customization evaluation. Gain the knowledge to take your generative AI applications to new heights, harnessing tailored, high-performance language processing solutions that give you a competitive advantage.
Amazon Bedrockで生成AIモデルをファインチューニングし、より高品質な結果を得るためにカスタマイズAIの力を引き出しましょう。MetaのLlamaやAnthropicのClaudeモデルなどの基盤モデルを、特定のユースケースやドメインに適応させる方法を学び、精度と効率を向上させます。このセッションでは、データ準備からモデルのカスタマイズ技術、トレーニング戦略、デプロイ時の考慮事項、カスタマイズ後の評価まで、技術的プロセスを網羅します。特化型で高性能な言語処理ソリューションを活用し、競争優位性を獲得するために、生成AIアプリケーションを次のレベルへ引き上げる知識を習得しましょう。
スピーカー
- Eissa Jamil
- Meta GenAI Partner Engineer
- Yanyan Zhang
- AWS Sr. Data Scientist
- Shreyas Subramanian
- AWS Principal Data Scientist
セッション動画
Fine-tuning とは
事前に学習されたモデルを使ってデータに合わせてカスタマイズする処理のことを指します。
カスタマイズする際には、モデルに任せるタスクに応じて適切なデータセットが必要となります。
何が嬉しいか
ユースケースに特化したモデルを作成できます。
金融分野やヘルスケア分野など各ドメインに特化したモデル作成が行われてきました。
また、高品質なデータを使うほど、特定のタスクでの最終結果はより良いものになります。
ライフサイクル
以下は、Fine-tuningを実施する際のライフサイクルの図です。
ユースケースを起点に、データ収集、前処理、モデル学習、モニタリング、評価のサイクルを繰り返していきます。
モデル学習についてじゃ、様々なフレームワークが存在しています。
AWSであれば、Amazon SageMaker、Amazon Bedrockなどがあります。
Fine-tuning の選定基準
問題 | 例 | Fine-tuning による成功の可能性 | プロンプト(+RAG)による成功の可能性 |
---|---|---|---|
モデルに特定の形式やトーンを守らせる | 特定のJSONスキーマを使用する、カスタマーサービス担当者のように話す | 非常に高い | 高い |
モデルに新しいスキルを教える | APIの呼び出し方を学習する、専有ドキュメントの記入、顧客サポートチケットの分類 | 高い | 中 |
新しいスキルを教え、類似スキルも学習させることを期待する | 契約書の要約方法を教え、より良い契約書を書くスキルの学習を期待する | 低い | 中 |
モデルに新しい知識を教え、それを一般的なタスクに活用することを期待する | 会社の略語を学ぶ、音楽に関する事実をさらに知る | 非常に低い | 中 |
各問題ごとでの Fine-tuning の適用推奨度が示されています。
特に「モデルに特定の形式やトーンを守らせる」は、LLM活用の際によく見かける問題ですが、RAG以外にも Fine-tuning も有効であるそうです。
逆に、「モデルに新しい知識を教え、それを一般的なタスクに活用することを期待する」のシーンでは Fine-tuning はあまり有効ではないようです。
但し、上記はあくまでも参考程度で「No straightforward answer(明確な答えは存在しない)」です。
試行錯誤とテストを行いながら、Fine-tuning を検討していきます。
検討する際の考慮事項としては以下が考えられます。
- 既知の概念であるか
- 小規模な Fine-tuning では、新しい概念を学習するのは難しい
- Few-shotでの結果
- Few-shotが有効な場合、Fine-tuning も有効であるケースが多い
- トークンの削減
- トークン量が減り、コスト・レイテンシー削減の可能性がある
Amazon Bedrock での Fine-tuning
JSONL形式のデータセットをS3バケットにアップロードして、コンソールまたはAPIから Fine-tuning を開始できます。
Fine-tuning したモデルは、プロビジョニングスループットを割り当てることで利用できるようになります。
Fine-tuning を行う際には、エポック数やバッチサイズなどの一般的なハイパーパラメータを設定することも可能です。
Amazon Bedrock での Continued Pre-training
ほとんどのケースでは、Fine-tuning でうまく機能しますが、新しい概念を取り入れたいケースなどでは Continued Pre-training を行います。
カスタムモデルインポート
この機能は、数ヶ月前にGAされた機能となっています。
Amazon Bedrockでは提供されていないモデルをインポートして利用できる機能となっています。
特にモデル呼び出しのためのインフラ、Knowledge Base や Guardrail などAmazon Bedrock の機能を利用可能な点が良いです。
Amazon Bedrock Model Distillation
この機能は、re:Invent2024で発表された機能です。
この機能では、大規模モデルを使ってデータセットを生成して、小規模モデルに適用させ、特定のタスクを学習した蒸留モデルを作成することができます。
この機能では、Fine-tuningのように事前にデータを準備することでも開始できますが、モデル呼び出しログを利用した学習も可能となっています。
Claude 3 Haiku Fine-tuning ベストプラクティス
データフォーマット
Claude 3 Haiku Fine-tuningでは、JSONL形式のデータとして、1行ごとに学習データを記載します。
また、Message API での記述とも互換性があります。
データフォーマットについては以下ドキュメントにも記載があります。
{"system": "<system message>","messages":[{"role": "user", "content": "<user query 1>"},{"role": "assistant", "content": "<expected generated text 1>"}, {"role": "user", "content": "<user query 2>"},{"role": "assistant", "content": "<expected generated text 2>"}]}
system(System Prompt)については、任意の項目ですが、可能であれば設定すべきです。
system(System Prompt)を記載することで、モデルに役割を与えることになり、多くのケースでパフォーマンス向上が期待できるためです。
messagesは必須の項目で、user
とassistant
の2つのroleが必要です。マルチターンの会話に対してもサポートされています。
ハイパーパラメータ
名前 | 説明 | 型 | デフォルト値 | 値の範囲 |
---|---|---|---|---|
epochCount | トレーニングデータセット全体を繰り返し処理する最大回数。EpochCountはエポックに相当します。 | 整数 (Integer) | 2 | 1–10 |
batchSize | モデルパラメーターの更新前に処理されるサンプル数。 | 整数 (Integer) | 32 | 4–256 |
learningRateMultiplier | 学習率に影響を与える倍率。各バッチ後にモデルパラメーターが更新される速度を制御します。 | 浮動小数点 (Float) | 1 | 0.1–2 |
earlyStoppingThreshold (オプション) | 過学習を防ぐために必要な検証損失の最小改善値。 | 浮動小数点 (Float) | 0.001 | 0–0.1 |
earlyStoppingPatience (オプション) | トレーニングプロセスを停止する前に検証損失の停滞を許容する回数。 | 整数 (Integer) | 2 | 1–10 |
Claude 3 Haiku の Fine-tuning では、5つのパラメータをサポートしています。
任意パラメータについても、設定が強く推奨されています。
Early Stopping Threshold と Early Stopping Patience は、検証データセットを提供する場合に有効にできます。
このパラメータを設定することで、学習過程で損失が改善しない場合に、学習を停止させ、過学習を防ぐ効果があるとされています。
パラメータの最適化
- learningRateMultiplier
- 「1」の設定値から開始して、モデルの評価を行いながら、調整していく
- batchSize
- データセットのサイズによって最適値がある
また、大規模データセット(1000~10000のサンプル数)の場合は、学習率、小規模データセット (100例未満) では、バッチサイズがパフォーマンスに影響を与えるようです。
パフォーマンスの評価
TAT-QAデータセットを用いたパフォーマンス評価では、Fine-tuning を施した Claude 3 Haiku は91.2%の精度を達成し、ベースモデルやClaude 3 Sonnet、Claude 3.5 Sonnetを上回る性能となっています。
Fine-tuning後でも In-context learning の活用は推奨されます。
「In-context learning」って何だっけと思ったので、調べたところ、Few-shot のような使い方を指しているようでした。
トークン使用量の削減
TAT-QAデータセットでは、ベースモデルでは平均34トークンを使用したのに対し、ファインチューニングされたモデルでは平均22トークンと、35%の削減が達成されました。
また、ヒストグラムからもファインチューニングされたモデルは簡潔な出力を示し、不要な情報を生成する傾向が少ないことが分かります。
Llama での Fine-tuning
ユースケース
Llama 3の Fine-tuning が有効なユースケースとして、「カスタマーサービスチャットボット」や「コンテンツ生成」などがあります。
なお、あくまでも想定のユースケースであって、これ以外のシーンでも Fine-tuning を検討する価値はありそうです。
データ
Fine-tuningでは、データセットの分析と処理が重要です。目的に適した多様で一般化された特化データセットを用意することが成功の鍵となります。
また、多様なデータセットは一般化を促進し、ドメイン固有およびカスタムデータセットは特定タスクに高精度な結果を提供します。
Fine-tuning のデフォルト設定
GitHub にて、LlamaとFine-tuningに関するデフォルト設定やサンプルを公開しています。
スライド内でも記載されているように、バッチサイズやエポック数などのハイパーパラメータの設定は、GitHub のソースコードを参考とすれば良さそうです。
Fine-tuning 適用時のサンプル
通常の Llama モデルは、数学の問題で誤った計算と曖昧な説明を出力しましたが、Fine-tunedモデルは問題を正確に理解し、簡潔で正しい計算結果を出力しました。
この結果からも、Fine-tuningによってモデルの精度と指示の理解力が向上していることがわかります。
デモ
以下のノートブックを使ったデモが行われました。
以下のように、最終的なアウトプットとして、ベースモデル、Fine-tuningモデルの比較を行うことができます。
さいごに
Fine-tuning の利用シーンが網羅的に解説されているため、非常に学びのあるセッションでした。
また、re:Invent2024で発表された機能なども実際に紹介されている点も良かったです。
Fine-tuning を Amazon Bedrock で試したことがないので、どこかのタイミングでやってみたいと思います。